package com.cqeec.demo.util;

import java.util.regex.Pattern;

/**
 * 校验数据信息工具类
 * 
 * @Title: ValidateUtil
 * @Descripton: 对数据进行有效的校验
 */
public class ValidateUtil {
	/**
	 * 验证字符串是否有效
	 * 
	 * @param str 被验证的字符串
	 * @return 有效返回true，否则返回false
	 */
    public static Boolean isValidate(String str) {
        if (null == str || "".equals(str.trim())) {
            return false;
        }
        return true;
    }

    /**
     * 验证字符串的长度是否有效
     * 
     * @param str       被验证的字符串
     * @param minLength 最小长度
     * @param maxLength 最大长度
     * @return  如果字符串在指定的长度之间返回true，否则返回false
     */
    public static Boolean isLength(String str, int minLength, int maxLength) {
    	if(!ValidateUtil.isValidate(str)){
    		return false;
    	}
        if (str.trim().length() < minLength || str.trim().length() > maxLength) {
            return false;
        }
        return true;
    }
    
    /**
     * 正则验证字符串
     * 
     * @param str 被验证的字符串
     * @param regex
     * @return
     */
    public static Boolean regexValidate(String str, String regex){
    	if(!ValidateUtil.isValidate(str)){
    		return false;
    	}
    	return str.matches(regex);
    }

    /**
     * 获取字符串的长度
     * 
     * @param str 被操作的字符串
     * @param len 指定要返回的长度
     * @return 返回指定长度的字符串
     */
    public static int getLength(String str) {
        if (null != str && str.trim().length() > 0) {
            return str.trim().length();
        }
        return 0;
    }

    /** 去除script、style、html代码  */
    public static String HtmltoText(String inputString) {
        String htmlStr = inputString;
        String textStr = "";
        java.util.regex.Pattern p_script;
        java.util.regex.Matcher m_script;
        java.util.regex.Pattern p_style;
        java.util.regex.Matcher m_style;
        java.util.regex.Pattern p_html;
        java.util.regex.Matcher m_html;

        try {
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
            String regEx_html = "<[^>]+>";

            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll(""); // 过滤script标签

            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll(""); // 过滤style标签

            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll(""); // 过滤html标签
            
            textStr = htmlStr;
        } catch (Exception e) {
        }
        return textStr;// 返回文本字符串
    }
    
    /** 去除script、style、html和空格代码  */
    public static String HtmltoText2(String inputString) {
        String htmlStr = inputString;
        String textStr = "";
        java.util.regex.Pattern p_script;
        java.util.regex.Matcher m_script;
        java.util.regex.Pattern p_style;
        java.util.regex.Matcher m_style;
        java.util.regex.Pattern p_html;
        java.util.regex.Matcher m_html;
        java.util.regex.Pattern p_ba;
        java.util.regex.Matcher m_ba;

        try {
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
            String regEx_html = "<[^>]+>";
            String patternStr = "\\s+";

            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll(""); // 过滤script标签

            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll(""); // 过滤style标签

            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll(""); // 过滤html标签

            p_ba = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
            m_ba = p_ba.matcher(htmlStr);
            htmlStr = m_ba.replaceAll(""); // 过滤空格
            
            textStr = htmlStr;
        } catch (Exception e) {
        }
        return textStr;// 返回文本字符串
    }
    
    /** 去除script和style代码  */
    public static String HtmltoText3(String inputString) {
        String htmlStr = inputString;
        String textStr = "";
        java.util.regex.Pattern p_script;
        java.util.regex.Matcher m_script;
        java.util.regex.Pattern p_style;
        java.util.regex.Matcher m_style;

        try {
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";

            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll(""); // 过滤script标签

            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll(""); // 过滤style标签
            
            textStr = htmlStr;
        } catch (Exception e) {
        }
        return textStr;// 返回文本字符串
    }
    
    /**
     * 精确截取字符串的长度，字符串编码格式为UTF-8
     * 
     * @param srcStr     被截取的字符串 
     * @param byteIndex  要截取的长度，UTF-8一个中文字占3位,如果要显示10个字符串，那长度就为30
     * @param flag       是否在超过字数后显示...，值为true显示，值为false不显示
     * @return
     * @throws Exception
     */
    public static String getSubString(String srcStr, int byteIndex, boolean flag) {
        try {
			if (srcStr.getBytes("UTF-8").length < byteIndex) {
				return srcStr;
			}
			String temp = srcStr;
			for (int i = 0; i < srcStr.length(); i++) {
			    if (temp.getBytes("UTF-8").length <= byteIndex) {
			        break;
			    }
			    temp = temp.substring(0, temp.length() - 1);
			}
			if(flag){
				return temp + "...";
			}
			return temp;
		} catch (Exception e) {
			return "";
		}
    }
    
}
